// 默认配置
const getMainDomain = (url = location.host) => {
  const parts = url.split(".");
  if (parts.length >= 2) {
    url = parts.slice(-2).join(".");
  }
  return url;
};

/**
 * 获取API基础地址
 */
const getApiBaseUrl = () => {
  // 优先使用环境变量
  if (process.env.VUE_APP_BASE_API) {
    return process.env.VUE_APP_BASE_API;
  }
  
  // 开发环境优先使用VUE_APP_PROXY_TARGET
  if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_PROXY_TARGET) {
    return process.env.VUE_APP_PROXY_TARGET;
  }
  
  // 开发环境使用相对路径（通过代理）
  if (process.env.NODE_ENV === 'development') {
    return ''; // 相对路径，通过webpack-dev-server代理
  }
  
  // 生产环境根据部署方式选择
  if (process.env.VUE_APP_USE_RELATIVE_PATH === 'true') {
    return ''; // 相对路径
  }
  
  // 默认使用域名推断
  return `https://adminapi.${getMainDomain()}`;
};

/**
 * 获取WebSocket基础地址
 */
const getWsBaseUrl = () => {
  // 优先使用环境变量
  if (process.env.VUE_APP_BASE_WSS) {
    return process.env.VUE_APP_BASE_WSS;
  }
  
  // 开发环境优先使用VUE_APP_PROXY_TARGET生成WebSocket地址
  if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_PROXY_TARGET) {
    const proxyTarget = process.env.VUE_APP_PROXY_TARGET;
    return proxyTarget.replace(/^https?:\/\//, 'ws://');
  }
  
  // 开发环境使用相对路径（通过代理）
  if (process.env.NODE_ENV === 'development') {
    return `${location.protocol === 'https:' ? 'wss:' : 'ws:'}//${location.host}`;
  }
  
  // 生产环境根据部署方式选择
  if (process.env.VUE_APP_USE_RELATIVE_PATH === 'true') {
    return `${location.protocol === 'https:' ? 'wss:' : 'ws:'}//${location.host}`;
  }
  
  // 默认使用域名推断
  return `wss://adminapi.${getMainDomain()}`;
};

/**
 * 加载配置
 */
export const loadAppConfig = () => {
  window.__config = {
    _BASE_API: getApiBaseUrl(),
    _BASE_WSS: getWsBaseUrl(),
  };

  for (const key in process.env) {
    if (
      Object.hasOwnProperty.call(process.env, key) &&
      key.indexOf("VUE") > -1
    ) {
      let tempKey = key.replace("VUE", "");
      window.__config[tempKey] = process.env[key];
    }
  }
  window.__config = __config;
  
  // 打印配置信息（仅开发环境）
  if (process.env.NODE_ENV === 'development') {
    console.log('🚀 Admin项目配置:', {
      API: window.__config._BASE_API,
      WSS: window.__config._BASE_WSS,
      ENV: process.env.VUE_APP_ENV,
      NODE_ENV: process.env.NODE_ENV
    });
  }
  
  if (__config._USER_NODE_ENV == "production") {
    Object.freeze(window.__config);
    Object.defineProperty(window, "__config", {
      configurable: false,
      writable: false,
      enumerable: false,
    });
  }
};
loadAppConfig();
